package main

import "fmt"

/*
字母异位词分组
给定一个字符串数组，将字母异位词组合在一起。字母异位词指字母相同，但排列不同的字符串。

示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]
 */

func groupAnagrams(strs []string) [][]string {
	res := make([][]string, 0)
	resMap := make(map[string][]string)
	// 排序的匿名函数
	sort := func(str []byte) string {
		// 插入排序
		for i := 0; i < len(str) - 1; i ++ {
			for j := i + 1; j > 0; j -- {
				if str[j] > str[j - 1] {
					break
				}
				str[j], str[j - 1] = str[j - 1], str[j]
			}
		}
		return string(str)
	}
	for _, v := range strs {
		s := sort([]byte(v))
		resMap[s] = append(resMap[s], v)
	}
	for key :=range resMap{
		res = append(res, resMap[key])
	}

	return res
}

func main() {
	fmt.Println(groupAnagrams([]string{"tan", "ant", "asdf", "adsf", "dsaf", "ghj"}))
}
